package com.findyou.utils;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Title: BeanFactory
 * @Author 贾金博
 * @Package com.findyou.utils
 * @Date 2024/11/3 下午3:05
 * @description: 工厂类
 */
public class BeanFactory {
    private static Map<String, Object> ioc = new HashMap<>();

   //静态代码块，初始之前执行下面代码
    static {
        try {
            // 1.读取配置文件
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml");
            // 2.解析xml
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(in);
            // 3.编写xpath表达式
            // 其中 //bean是用来选择XML文档中所有的<bean>元素
            String xpath = "//bean";
            // 4.获取所有的bean标签
            List<Element> list = document.selectNodes(xpath);
            // 5.遍历并创建对象实例，设置到map集合中
            for (Element element : list) {
                String id = element.attributeValue("id");
                String className = element.attributeValue("class");
                Object object = Class.forName(className).newInstance();
                ioc.put(id, object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取指定id的对象实例
     * @param beanId
     * @return
     */
    public static Object getBean(String beanId) {
        return ioc.get(beanId);
    }
}
